//
// Created by Lantz on 2024/3/15.
//
/**
 * 顺序表
 */
#include <stdio.h>
#define MaxSize 50

typedef int Elem;
typedef struct {
   Elem data[MaxSize];
   int length;
}SL;

// 插入元素
bool InsertElem(SL &L, int i, Elem e){
    // 边界条件
    if(i < 1 || i > L.length + 1){
        return false;
    }
    if(L.length > MaxSize) return false;
    for (int j = L.length; j >= i; --j) {
        L.data[j] = L.data[j-1];// 后移
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

// 删除
bool DeleteElem(SL &L, int i, Elem &e){
    if(i < 1 || i > L.length+1){
        return false;
    }
    if(L.length > MaxSize) return false;
    e = L.data[i-1];
    for (int j = i; j < L.length; ++j) {
        // 前移
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;
}

// 按值查找
int FindElem(SL L, Elem e){
    for (int i = 0; i < L.length; ++i) {
        if(L.data[i] == e){
            return i+1;
        }
    }
}

// 打印
void Print(SL L){
    for (int i = 0; i < L.length; ++i) {
        printf("%d ", L.data[i]);
    }
    printf("\n");
}

int main(void){

    SL L;
    L.data[0] = 1;
    L.data[1] = 2;
    L.data[2] = 3;
    L.length = 3;
    Print(L);
    InsertElem(L, 3, 33);
    Print(L);
    Elem val;
    DeleteElem(L, 3, val);
    printf("%d\n", val);
    Print(L);
    Elem pval = FindElem(L, 3);
    printf("%d\n", pval);
    return 0;
}
